home *** CD-ROM | disk | FTP | other *** search
/ Aminet 34 / Aminet 34 (2000)(Schatztruhe)[!][Dec 1999].iso / Aminet / util / misc / cycledbase.lha / CycleDBase / CycleDBase.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-27  |  7.2 KB  |  218 lines

  1. /*  Purpose:    Program allows entry of trip information, saving, loading
  2.                 and editing of the information
  3.     Author:     Donald W Millican
  4.     Start Date : 18/06/99
  5.     Finish Date: 29/06/99
  6.     Section:    Future
  7.     Program:    Simple cycle trip database
  8. */
  9.  
  10. /*
  11. *** Pre-Program History ***
  12. 20/06/99 : Version 0.1 : Main Window created and basic GUI structures ready
  13. 22/06/99 : Version 0.2 : Record Structure established & Destination detected
  14. 23/06/99 : Version 0.3 : All fields down to train working
  15. 23/06/99 : Version 0.4 : All fields working
  16. 24/06/99 : Version 0.5 : Menu item 'New' works
  17. 25/06/99 : Version 0.6 : Vanilla keys are working
  18. 28/06/99 : Version 0.7 : Save routines created and working
  19. 28/06/99 : Version 0.8 : Load routines created and working
  20. 29/06/99 : Version 0.9 : ASL filerequester integrated into load & save
  21. 29/06/99 : Version 0.95 : Bugfixing and streamlining of code
  22.  
  23. *** Program History
  24. 29/06/99 : Version 1.0 : Initial Release
  25. 30/06/99 : Version 1.1 : Tidy up existing requesters & include error requesters
  26. 30/06/99 : Version 1.2 : Create record counter gadget
  27. 01/07/99 : Version 1.3 : Warning requesters for 'New', 'Load' & 'Save'
  28. 02/07/99 : Version 1.4 : CycleDBase file recognition
  29. 07/07/99 : Version 1.5 : New Search menu & function 'Exact Match'
  30. 01/08/99 : Version 1.6 : Fix corruption when menu item 'new' is selected
  31. 05/08/99 : Version 1.65 : Add recognition of existing records & improve requesters
  32. 06/08/99 : Version 1.7 : Reduce save file sizes using record recognition
  33. 21/09/99 : Version 1.8 : Create seperate 'Advanced Search' program
  34. 26/09/99 : Version 1.9 : Advanced Search program works properly
  35. 26/09/99 : Version 1.95 : Use records.recs (actual records) for normal searches
  36. --/--/99 : Version 2.0 : Incorporate new search program into CycleDBase
  37. --/--/99 : Version 2.1 : New Search function 'Containing' - use at later date
  38. --/--/99 : Version 2.2 : 'Containing' added to AdvSearch program
  39. --/--/99 : Version 2.3 : AdvSearch incorporated into CycleDBase again
  40. */
  41.  
  42. #include <exec/types.h>
  43. #include <clib/dos_protos.h>
  44. #include <clib/exec_protos.h>
  45. #include <clib/gadtools_protos.h>
  46. #include <clib/graphics_protos.h>
  47. #include <clib/intuition_protos.h>
  48. #include <graphics/gfxmacros.h>
  49. #include <graphics/GfxBase.h>
  50. #include <intuition/intuition.h>
  51. #include <intuition/IntuitionBase.h>
  52. #include <libraries/gadtools.h>
  53. #include <string.h>
  54. #include <stdlib.h>
  55. #include <stdio.h>
  56.  
  57. #include "CycleDBaseWindow.c"
  58.  
  59. /*
  60. ** Prepare for using GadTools, set up gadgets and open window.
  61. ** Clean up and when done or on error.
  62. */
  63. void gadtoolsWindow()
  64. {
  65.     struct TextFont *font;
  66.     struct Screen   *mysc;
  67.     struct Window   *mywin;
  68.     struct Gadget   *glist, *my_gads[NUM_GADS];
  69.     struct StringInfo *gad_ptr[PTRS];
  70.     void            *vi;
  71.     APTR            visualinfo;
  72.     UWORD           topborder;
  73.     struct Menu *mainmenustrip;
  74.  
  75. /****************************/
  76. /* THE MENU STRUCTURE: */
  77. /****************************/
  78. struct NewMenu main_menu[] =
  79. {
  80. {NM_TITLE,"Main",0,0,0,0,},
  81. {NM_ITEM,"New","N",0,0,0,},
  82. {NM_ITEM,"Load...","L",0,0,0,},
  83. {NM_ITEM,"Save...","S",0,0,0,},
  84. {NM_ITEM,"About","A",0,0,0,},
  85. {NM_ITEM,"Quit","Q",0,0,0,},
  86.  
  87. {NM_TITLE,"Search",0,0,0,0,},
  88. {NM_ITEM,"Exact Match...","E",0,0,0,},
  89. {NM_ITEM,"Containing...","C",0,0,0,},
  90. {NM_ITEM,NM_BARLABEL,0,0,0,0,},
  91. {NM_ITEM,"Advanced Search","S",0,0,0,},
  92. {NM_END,NULL,0,0,0,0,},
  93. };
  94.  
  95. // Copy file identification string to header structure
  96. strcpy(headerdata.file_id, FILEDEF);
  97. // Set number of actual records to zero
  98. records.recs[0] = 0;
  99.  
  100. /* Open topaz 8 font, so we can be sure it's openable
  101. ** when we later set ng_TextAttr to &Topaz80:
  102. */
  103.  
  104. if (NULL == (font = OpenFont(&Topaz80)))
  105.     {
  106.         EasyRequest(NULL, &nofont, NULL);
  107.     }
  108. else
  109.     {
  110.     if (NULL == (mysc = LockPubScreen(NULL)))
  111.         {
  112.             EasyRequest(NULL, &noscreen, NULL);
  113.         }
  114.     else
  115.         {
  116.         if (NULL == (vi = GetVisualInfo(mysc, TAG_END)))
  117.             {
  118.                 EasyRequest(NULL, &novisinfo, NULL);
  119.             }
  120.         else
  121.             {
  122.             /* Here is how we can figure out ahead of time how tall the  */
  123.             /* window's title bar will be:                               */
  124.             topborder = mysc->WBorTop + (mysc->Font->ta_YSize + 1);
  125.  
  126.             if (NULL == createAllGadgets(&glist, vi, topborder,
  127.                                          my_gads, gad_ptr))
  128.                 {
  129.                     EasyRequest(NULL, &nogadgets, NULL);
  130.                 }
  131.             else
  132.                 {
  133.  
  134.                 if (NULL == (mywin = OpenWindowTags(NULL,
  135.                         WA_Title,     "Cycle Database",
  136.                         WA_Gadgets,   glist,      WA_AutoAdjust,    TRUE,
  137.                         WA_Width,       450,      WA_MinWidth,       450,
  138.                         WA_InnerHeight, 200,      WA_MinHeight,      200,
  139.                         WA_DragBar,    TRUE,      WA_DepthGadget,   TRUE,
  140.                         WA_Activate,   TRUE,      WA_CloseGadget,   TRUE,
  141.                         WA_SimpleRefresh, TRUE,   WA_NewLookMenus, TRUE,
  142.                         WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW |
  143.                             IDCMP_VANILLAKEY | IDCMP_MENUPICK | STRINGIDCMP |
  144.                             BUTTONIDCMP,
  145.                         WA_PubScreen, mysc,
  146.                         TAG_END)))
  147.                     {
  148.                         EasyRequest(NULL, &nowindow, NULL);
  149.                     }
  150.                 else
  151.                     {
  152.                     /* After window is open, gadgets must be refreshed with a
  153.                     ** call to the GadTools refresh window function.
  154.                     */
  155.                     GT_RefreshWindow(mywin, NULL);
  156.  
  157.                     visualinfo=GetVisualInfo(mysc, TAG_END);
  158.                     mainmenustrip=CreateMenus(main_menu, TAG_END);
  159.                     LayoutMenus(mainmenustrip, visualinfo, GTMN_NewLookMenus, TRUE, TAG_END);
  160.                     SetMenuStrip(mywin, mainmenustrip);
  161.  
  162.                     process_window_events(mysc, mywin, my_gads, mainmenustrip, gad_ptr);
  163.  
  164.                     ClearMenuStrip( mywin );
  165.                     FreeMenus(mainmenustrip);
  166.  
  167.                     CloseWindow(mywin);
  168.                     }
  169.                 }
  170.             /* FreeGadgets() even if createAllGadgets() fails, as some
  171.             ** of the gadgets may have been created...If glist is NULL
  172.             ** then FreeGadgets() will do nothing.
  173.             */
  174.             FreeGadgets(glist);
  175.             FreeVisualInfo(vi);
  176.             FreeVisualInfo(visualinfo);
  177.             }
  178.         UnlockPubScreen(NULL, mysc);
  179.         }
  180.     CloseFont(font);
  181.     }
  182. }
  183.  
  184.  
  185. /*
  186. ** Open all libraries and run.  Clean up when finished or on error..
  187. */
  188. void main()
  189. {
  190. if (NULL == (IntuitionBase = OpenLibrary("intuition.library", 37)))
  191.     {
  192.         EasyRequest(NULL, &nointuition, NULL);
  193.     }
  194. else
  195.     {
  196.     if (NULL == (GfxBase = OpenLibrary("graphics.library", 37)))
  197.         {
  198.             EasyRequest(NULL, &nographics, NULL);
  199.         }
  200.     else
  201.         {
  202.         if (NULL == (GadToolsBase = OpenLibrary("gadtools.library", 37)))
  203.             {
  204.                 EasyRequest(NULL, &nogadtools, NULL);
  205.             }
  206.         else
  207.             {
  208.             gadtoolsWindow();
  209.  
  210.             CloseLibrary(GadToolsBase);
  211.             }
  212.         CloseLibrary(GfxBase);
  213.         }
  214.     CloseLibrary(IntuitionBase);
  215.     }
  216. }
  217.  
  218.